summaryrefslogtreecommitdiff
path: root/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-06-17 09:02:32 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-06-17 09:02:32 +0000
commit7a1524ba54f43d0f2a19e4bca2c6a2e0b01c5ef1 (patch)
treedaa214d404c7fc78b32419a028724e5671a6c7a4 /app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx
parentfa6a6093014c5d60188edfc9c4552e81c4b97bd1 (diff)
(대표님) 20250617 18시 작업사항
Diffstat (limited to 'app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx')
-rw-r--r--app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx81
1 files changed, 81 insertions, 0 deletions
diff --git a/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx b/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx
new file mode 100644
index 00000000..772a9840
--- /dev/null
+++ b/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx
@@ -0,0 +1,81 @@
+// app/vendor/quotations/[id]/page.tsx - 견적 응답 페이지
+import { Metadata } from "next"
+import { notFound } from "next/navigation"
+import db from "@/db/db";
+import { eq } from "drizzle-orm"
+import { procurementVendorQuotations } from "@/db/schema"
+import { getServerSession } from "next-auth/next"
+import { authOptions } from "@/app/api/auth/[...nextauth]/route"
+import VendorQuotationEditor from "@/lib/procurement-rfqs/vendor-response/quotation-editor";
+
+
+interface PageProps {
+ params: {
+ id: string
+ }
+}
+
+export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
+ return {
+ title: "견적서 응답",
+ description: "RFQ에 대한 견적서 작성 및 제출",
+ }
+}
+
+export default async function VendorQuotationPage({ params }: PageProps) {
+
+ const quotationId = parseInt(params.id)
+
+ if (isNaN(quotationId)) {
+ notFound()
+ }
+
+ // 인증 확인
+ const session = await getServerSession(authOptions);
+
+ if (!session?.user) {
+ return (
+ <div className="flex h-full items-center justify-center">
+ <div className="text-center">
+ <h2 className="text-xl font-bold">로그인이 필요합니다</h2>
+ <p className="mt-2 text-muted-foreground">견적서 응답을 위해 로그인해주세요.</p>
+ </div>
+ </div>
+ )
+ }
+
+ // 견적서 정보 가져오기
+ const quotation = await db.query.procurementVendorQuotations.findFirst({
+ where: eq(procurementVendorQuotations.id, quotationId),
+ with: {
+ rfq: true, // 관계 설정 필요
+ vendor: true, // 관계 설정 필요
+ // items: true, // 관계 설정 필요
+ }
+ })
+
+ if (!quotation) {
+ notFound()
+ }
+
+ // 벤더 권한 확인 (필요한 경우)
+ const isAuthorized = session.user.domain === "partners" &&
+ session.user.companyId === quotation.vendorId
+
+ if (!isAuthorized) {
+ return (
+ <div className="flex h-full items-center justify-center">
+ <div className="text-center">
+ <h2 className="text-xl font-bold">접근 권한이 없습니다</h2>
+ <p className="mt-2 text-muted-foreground">이 견적서에 대한 권한이 없습니다.</p>
+ </div>
+ </div>
+ )
+ }
+
+ return (
+ <div className="container py-8">
+ <VendorQuotationEditor quotation={quotation} />
+ </div>
+ )
+} \ No newline at end of file